Hyödynnä Scikit-learnin esikäsittelyn teho datamuunnosputkien avulla. Opi rakentamaan vahvoja ja tehokkaita koneoppimisprosesseja optimaalisen mallin suorituskyvyn saavuttamiseksi.
Scikit-learn Esikäsittely: Datamuunnosputkien hallinta koneoppimista varten
Koneoppimisen maailmassa datasi laatu vaikuttaa suoraan malliesi suorituskykyyn. Raakadata sisältää usein epäjohdonmukaisuuksia, puuttuvia arvoja ja vaihtelevia asteikkoja, mikä tekee siitä sopimatonta suoraan käyttöön. Scikit-learn, tehokas Python-kirjasto, tarjoaa kattavan valikoiman esikäsittelytekniikoita datasi muuntamiseksi koneoppimisalgoritmeille sopivaan muotoon. Tämä artikkeli sukeltaa Scikit-learnin esikäsittelyn maailmaan keskittyen datamuunnosputkien luomiseen ja hyödyntämiseen koneoppimisprosessiesi virtaviivaistamiseksi.
Miksi datan esikäsittely on ratkaisevan tärkeää
Datan esikäsittely on prosessi, jossa raakadataa puhdistetaan, muunnetaan ja järjestetään, jotta se olisi sopivampaa koneoppimismalleille. Se on elintärkeä vaihe, koska koneoppimisalgoritmit ovat herkkiä syöttöominaisuuksien asteikolle ja jakaumalle. Ilman asianmukaista esikäsittelyä mallit voivat toimia huonosti, mikä johtaa epätarkkoihin ennusteisiin ja epäluotettaviin tuloksiin. Tässä on joitain keskeisiä syitä, miksi datan esikäsittely on olennaista:
- Parannettu mallin suorituskyky: Esikäsitelty data mahdollistaa mallien oppimisen tehokkaammin ja saavuttamisen suuremman tarkkuuden.
- Käsittelee puuttuvia arvoja: Imputointitekniikat täyttävät puuttuvat datapisteet estäen algoritmien kaatumisen tai harhaisten tulosten tuottamisen.
- Standardoi ominaisuuksien asteikot: Skaalausmenetelmät varmistavat, että kaikki ominaisuudet vaikuttavat yhtäläisesti malliin estäen ominaisuuksia, joilla on suuremmat arvot, hallitsemasta oppimisprosessia.
- Koodaa kategoriset muuttujat: Koodaustekniikat muuntavat kategorisen datan numeerisiksi esityksiksi, jotka koneoppimisalgoritmit voivat ymmärtää.
- Vähentää kohinaa ja poikkeamia: Esikäsittely voi auttaa lieventämään poikkeamien ja kohinaisen datan vaikutusta, mikä johtaa vankempiin malleihin.
Johdanto Scikit-learn -putkiin
Scikit-learn -putket tarjoavat tavan ketjuttaa useita datamuunnosvaiheita yhdeksi, uudelleenkäytettäväksi objektiksi. Tämä yksinkertaistaa koodiasi, parantaa luettavuutta ja estää datavuodon mallin arvioinnin aikana. Putki on pohjimmiltaan sarja datamuunnoksia, jota seuraa lopullinen estimoija (esim. luokittelija tai regressori). Tässä on syitä, miksi putket ovat niin hyödyllisiä:
- Koodin organisointi: Putket kapseloivat koko datan esikäsittely- ja mallinnustyönkulun yhdeksi yksiköksi, mikä tekee koodistasi järjestäytyneempää ja helpompaa ylläpitää.
- Datan vuotamisen esto: Putket varmistavat, että datamuunnoksia sovelletaan johdonmukaisesti sekä harjoitus- että testidataan, mikä estää datan vuotamisen, mikä voi johtaa ylisovittamiseen ja huonoon yleistykseen.
- Yksinkertaistettu mallin arviointi: Putket helpottavat mallisi suorituskyvyn arviointia käyttämällä tekniikoita, kuten ristiinvalidoinnin, koska koko esikäsittely- ja mallinnustyönkulkua sovelletaan johdonmukaisesti jokaiseen taitokseen.
- Virtaviivaistettu käyttöönotto: Putket voidaan helposti ottaa käyttöön tuotantoympäristöissä varmistaen, että data esikäsitellään samalla tavalla kuin harjoituksen aikana.
Yleisiä datan esikäsittelytekniikoita Scikit-learnissa
Scikit-learn tarjoaa laajan valikoiman esikäsittelytekniikoita. Tässä on joitain yleisimmin käytettyjä:
1. Skaalaus ja normalisointi
Skaalaus ja normalisointi ovat tekniikoita, joita käytetään numeeristen ominaisuuksien muuntamiseen samankaltaiselle arvoalueelle. Tämä on tärkeää, koska ominaisuudet, joilla on eri asteikot, voivat vaikuttaa suhteettomasti oppimisprosessiin. Scikit-learn tarjoaa useita skaalaus- ja normalisointimenetelmiä:
- StandardScaler: Standardoi ominaisuudet poistamalla keskiarvon ja skaalaamalla yksikkövarianssiin. Tämä on laajalti käytetty tekniikka, joka olettaa, että data noudattaa normaalijakaumaa.
Kaava:
x_skaalattu = (x - keskiarvo) / keskihajontaEsimerkki: Oletetaan, että sinulla on talojen hintoja USD:nä ja neliömäärää. Näiden ominaisuuksien skaalaus varmistaa, että malli ei anna kohtuutonta merkitystä ominaisuudelle, jolla on suuremmat arvot (esim. talojen hinnat).
- MinMaxScaler: Skaalaa ominaisuudet määritetylle alueelle, tyypillisesti välille 0 ja 1. Tämä on hyödyllistä, kun haluat säilyttää datan alkuperäisen jakauman.
Kaava:
x_skaalattu = (x - min) / (max - min)Esimerkki: Kuvankäsittelyssä käytetään usein MinMaxScaleriä pikseliarvojen normalisointiin välille [0, 1].
- RobustScaler: Skaalaa ominaisuudet käyttämällä tilastoja, jotka ovat vankkoja poikkeamille, kuten mediaani ja kvartiiliväli (IQR). Tämä on hyvä valinta, kun datasi sisältää poikkeamia.
Kaava:
x_skaalattu = (x - mediaani) / IQREsimerkki: Rahoitusdatasarjoissa, joissa poikkeamat ovat yleisiä (esim. äärimmäiset osakemarkkinoiden vaihtelut), RobustScaler voi tuottaa vakaampia tuloksia.
- Normalizer: Normalisoi näytteet yksittäin yksikkönormiin. Tämä on hyödyllistä, kun ominaisuusvektorin suuruus on tärkeämpi kuin yksittäiset ominaisuusarvot.
Kaava (L2-normi):
x_skaalattu = x / ||x||Esimerkki: Tekstinkäsittelyssä termin frekvenssi-käänteinen dokumentin frekvenssi (TF-IDF) -vektoreiden normalisointi on yleinen käytäntö.
2. Kategoristen muuttujien koodaus
Koneoppimisalgoritmit vaativat tyypillisesti numeerista syötettä, joten kategoriset muuttujat on muunnettava numeerisiksi esityksiksi. Scikit-learn tarjoaa useita koodaustekniikoita:
- OneHotEncoder: Luo binääriset sarakkeet jokaiselle ominaisuuden luokalle. Tämä sopii nimellisille kategorisille ominaisuuksille (ominaisuudet, joilla ei ole luontaista järjestystä).
Esimerkki: "Maa"-ominaisuuden koodaaminen arvoilla, kuten "USA", "Kanada" ja "Iso-Britannia", loisi kolme uutta saraketta: "maa_USA", "maa_Kanada" ja "maa_Iso-Britannia".
- OrdinalEncoder: Määrittää kokonaislukuarvon jokaiselle luokalle sen järjestyksen perusteella. Tämä sopii järjestetyille kategorisille ominaisuuksille (ominaisuudet, joilla on merkityksellinen järjestys).
Esimerkki: "Koulutustaso"-ominaisuuden koodaaminen arvoilla, kuten "Lukio", "Kandidaatti" ja "Maisteri", määrittäisi kokonaislukuarvot, kuten 0, 1 ja 2.
- LabelEncoder: Koodaa kohde-etiketit arvoilla välillä 0 ja n_luokat-1. Käytä tätä kohdemuuttujan koodaamiseen luokitteluongelmissa.
Esimerkki: "Roskaposti"- ja "ei roskapostia" -etikettien koodaaminen vastaavasti arvoiksi 0 ja 1.
- TargetEncoder (vaatii category_encoders -kirjaston): Koodaa kategoriset ominaisuudet kunkin luokan kohdemuuttujan keskiarvon perusteella. Voi johtaa kohteen vuotamiseen, jos sitä ei käytetä huolellisesti ristiinvalidoinnin yhteydessä.
3. Puuttuvien arvojen käsittely
Puuttuvat arvot ovat yleinen ongelma todellisissa datasarjoissa. Scikit-learn tarjoaa tekniikoita puuttuvien arvojen imputoimiseen (täyttämiseen):
- SimpleImputer: Imputoi puuttuvat arvot käyttämällä vakiomuuttujaa, keskiarvoa, mediaania tai ominaisuuden yleisintä arvoa.
- KNNImputer: Imputoi puuttuvat arvot käyttämällä k-lähimmän naapurin algoritmia. Se löytää k lähintä näytettä näytteelle, jossa on puuttuvia arvoja, ja käyttää näiden naapureiden keskiarvoa puuttuvan arvon imputoimiseen.
- IterativeImputer: Imputoi puuttuvat arvot käyttämällä iteratiivista mallinnustapaa. Jokainen ominaisuus, jossa on puuttuvia arvoja, mallinnetaan muiden ominaisuuksien funktiona, ja puuttuvat arvot ennustetaan iteratiivisesti.
4. Ominaisuuksien muunnos
Ominaisuuksien muunnoksessa luodaan uusia ominaisuuksia olemassa olevista. Tämä voi parantaa mallin suorituskykyä tallentamalla epälineaarisia suhteita tai vuorovaikutuksia ominaisuuksien välillä. Joitakin tekniikoita ovat:
- PolynomialFeatures: Luo polynomi-yhdistelmiä ominaisuuksista. Jos sinulla on esimerkiksi kaksi ominaisuutta x1 ja x2, PolynomialFeatures voi luoda uusia ominaisuuksia, kuten x1^2, x2^2, x1*x2.
- FunctionTransformer: Käyttää mukautettua funktiota ominaisuuksiin. Tämän avulla voit suorittaa mielivaltaisia muunnoksia, kuten logaritmisia muunnoksia tai eksponentiaalisia muunnoksia.
- PowerTransformer: Käyttää potenssimuunnosta datan muuttamiseksi Gaussin kaltaisemmaksi. Tämä voi olla hyödyllistä algoritmeille, jotka olettavat normaalisuuden, kuten lineaarinen regressio. (Sisältää Box-Cox- ja Yeo-Johnson-muunnokset)
Datan muunnosputkien rakentaminen Scikit-learnilla
Nyt sovelletaan näitä esikäsittelytekniikoita käytäntöön rakentamalla datamuunnosputkia. Tässä on vaiheittainen opas:
1. Tuo tarvittavat kirjastot
Aloita tuomalla tarvittavat kirjastot Scikit-learnista:
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler, OneHotEncoder, SimpleImputer
from sklearn.compose import ColumnTransformer
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
import pandas as pd
2. Lataa ja valmistele datasi
Lataa datasarjasi pandasin tai muun sopivan menetelmän avulla. Tunnista datasarjasi numeeriset ja kategoriset ominaisuudet. Esimerkiksi:
data = {
'age': [25, 30, 35, 40, 45, None],
'country': ['USA', 'Canada', 'USA', 'UK', 'Canada', 'USA'],
'salary': [50000, 60000, 70000, 80000, 90000, 55000],
'purchased': [0, 1, 0, 1, 0, 1]
}
df = pd.DataFrame(data)
3. Määritä esikäsittelyvaiheet
Luo esikäsittelymuuntajien esiintymiä, joita haluat käyttää. Esimerkiksi numeeristen ominaisuuksien käsittelyyn voit käyttää StandardScaler- ja SimpleImputer-muuntajia. Kategorisiin ominaisuuksiin voit käyttää OneHotEncoder-muuntajaa. Harkitse strategioiden sisällyttämistä puuttuvien arvojen käsittelyyn ennen skaalausta tai koodausta.
numerical_features = ['age', 'salary']
categorical_features = ['country']
numerical_transformer = Pipeline(steps=[
('imputer', SimpleImputer(strategy='mean')),
('scaler', StandardScaler())
])
categorical_transformer = Pipeline(steps=[
('onehot', OneHotEncoder(handle_unknown='ignore'))
])
4. Luo ColumnTransformer
Käytä ColumnTransformer-muuntajaa eri muuntajien soveltamiseen datasi eri sarakkeisiin. Tämän avulla voit esikäsitellä numeeriset ja kategoriset ominaisuudet erikseen.
preprocessor = ColumnTransformer(
transformers=[
('num', numerical_transformer, numerical_features),
('cat', categorical_transformer, categorical_features)
])
5. Rakenna putki
Luo Pipeline-objekti, joka ketjuttaa esikäsittelyvaiheet koneoppimismalliin. Tämä varmistaa, että data esikäsitellään johdonmukaisesti ennen kuin se syötetään malliin.
pipeline = Pipeline(steps=[('preprocessor', preprocessor),
('classifier', LogisticRegression())])
6. Kouluta ja arvioi malli
Jaa datasi harjoitus- ja testisarjoihin. Kouluta sitten putki harjoitusdatalla ja arvioi sen suorituskykyä testidatalla.
X = df.drop('purchased', axis=1)
y = df['purchased']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
pipeline.fit(X_train, y_train)
score = pipeline.score(X_test, y_test)
print(f'Mallin tarkkuus: {score}')
Täydellinen esimerkkikoodi
Tässä on täydellinen koodi datamuunnosputken rakentamiseen ja kouluttamiseen:
import pandas as pd
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler, OneHotEncoder, SimpleImputer
from sklearn.compose import ColumnTransformer
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
# Esimerkkidata
data = {
'age': [25, 30, 35, 40, 45, None],
'country': ['USA', 'Canada', 'USA', 'UK', 'Canada', 'USA'],
'salary': [50000, 60000, 70000, 80000, 90000, 55000],
'purchased': [0, 1, 0, 1, 0, 1]
}
df = pd.DataFrame(data)
# Määritä ominaisuudet
numerical_features = ['age', 'salary']
categorical_features = ['country']
# Luo muuntajat
numerical_transformer = Pipeline(steps=[
('imputer', SimpleImputer(strategy='mean')),
('scaler', StandardScaler())
])
categorical_transformer = Pipeline(steps=[
('onehot', OneHotEncoder(handle_unknown='ignore'))
])
# Luo esikäsittelijä
preprocessor = ColumnTransformer(
transformers=[
('num', numerical_transformer, numerical_features),
('cat', categorical_transformer, categorical_features)
])
# Luo putki
pipeline = Pipeline(steps=[('preprocessor', preprocessor),
('classifier', LogisticRegression())])
# Jaa data
X = df.drop('purchased', axis=1)
y = df['purchased']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Kouluta malli
pipeline.fit(X_train, y_train)
# Arvioi malli
score = pipeline.score(X_test, y_test)
print(f'Mallin tarkkuus: {score}')
Edistyneet putkitekniikat
Kun olet perehtynyt perusteisiin, voit tutkia edistyneempiä putkitekniikoita:
1. Mukautetut muuntajat
Voit luoda omia mukautettuja muuntajia suorittamaan erityisiä datamuunnoksia, jotka eivät ole saatavilla Scikit-learnissa. Mukautetun muuntajan luomiseksi sinun on perittävä TransformerMixin- ja BaseEstimator-luokista ja toteutettava fit- ja transform-menetelmät. Tämä voi olla hyödyllistä piirreteknisessä suunnittelussa tai toimialakohtaisissa muunnoksissa. Muista sisällyttää asianmukaiset dokumentointimerkkijonot luettavuuden parantamiseksi.
2. Ominaisuusyhdiste
Ominaisuusyhdisteen avulla voit yhdistää useiden muuntajien tuloksen yhdeksi ominaisuusvektoriksi. Tämä voi olla hyödyllistä, kun haluat soveltaa erilaisia muunnoksia samoihin ominaisuuksiin tai yhdistää ominaisuuksia, jotka on muunnettu eri tavoilla. FeatureUnion-luokkaa käytetään useiden muuntajien tuloksen yhdistämiseen yhdeksi ominaisuusvektoriksi.
3. Ruudukkoetsintä putkien kanssa
Voit käyttää GridSearchCV-muuntajaa optimoidaksesi putkesi hyperparametrit, mukaan lukien esikäsittelyvaiheiden hyperparametrit. Tämän avulla voit automaattisesti löytää parhaan yhdistelmän esikäsittelytekniikoita ja malliparametreja. Ole varovainen lisääntyneiden laskentakustannusten suhteen.
Parhaat käytännöt datan esikäsittelyputkille
Tässä on joitain parhaita käytäntöjä, jotka on syytä pitää mielessä datan esikäsittelyputkien rakentamisessa:- Ymmärrä datasi: Ennen kuin käytät mitään esikäsittelytekniikoita, ota aikaa datasi ymmärtämiseen. Tutki ominaisuuksiesi jakaumia, tunnista puuttuvat arvot ja etsi poikkeamia.
- Dokumentoi putkesi: Lisää kommentteja koodiisi selittämään putken jokainen vaihe. Tämä helpottaa koodisi ymmärtämistä ja ylläpitämistä.
- Testaa putkesi: Testaa putkesi perusteellisesti varmistaaksesi, että se toimii oikein. Käytä yksikkötestejä varmistaaksesi, että putken jokainen vaihe tuottaa odotetun tuloksen.
- Vältä datavuotoa: Ole varovainen datavuodon välttämiseksi datasi esikäsittelyssä. Varmista, että käytät vain harjoitusdatan tietoja harjoitusdatan esikäsittelyyn. Käytä putkia varmistaaksesi harjoitus- ja testidatan välinen johdonmukaisuus.
- Seuraa suorituskykyä: Seuraa mallisi suorituskykyä ajan mittaan ja kouluta se uudelleen tarpeen mukaan. Datan jakaumat voivat muuttua ajan myötä, joten on tärkeää arvioida putkesi säännöllisesti uudelleen ja tehdä tarvittavia muutoksia.
Todellisia esimerkkejä
Tarkastellaanpa joitain todellisia esimerkkejä siitä, miten datamuunnosputkia voidaan käyttää eri toimialoilla:- Rahoitus: Luottoriskin mallinnuksessa putkia voidaan käyttää asiakastietojen esikäsittelyyn, mukaan lukien numeeriset ominaisuudet, kuten tulot ja luottopisteet, sekä kategoriset ominaisuudet, kuten työsuhde ja lainan tarkoitus. Puuttuvat arvot voidaan imputoida käyttämällä tekniikoita, kuten keskiarvoimputointia tai k-lähimmän naapurin imputointia. Skaalaus on ratkaisevan tärkeää sen varmistamiseksi, että ominaisuudet, joilla on eri asteikot, eivät hallitse mallia.
- Terveydenhuolto: Lääketieteellisessä diagnostiikassa putkia voidaan käyttää potilastietojen esikäsittelyyn, mukaan lukien numeeriset ominaisuudet, kuten ikä, verenpaine ja kolesterolitasot, sekä kategoriset ominaisuudet, kuten sukupuoli ja sairaushistoria. Yksi-kuuma koodaus voidaan muuntaa kategoriset ominaisuudet numeerisiksi esityksiksi.
- Verkkokauppa: Tuotesuositusjärjestelmissä putkia voidaan käyttää asiakas- ja tuotetietojen esikäsittelyyn, mukaan lukien numeeriset ominaisuudet, kuten ostotiheys ja tuotearvostelut, sekä kategoriset ominaisuudet, kuten tuoteryhmä ja asiakkaan demografiset tiedot. Putket voivat sisältää vaiheita tekstin esikäsittelyyn, kuten tokenisointi ja stemming, ominaisuuksien poimimiseksi tuotekuvauksista ja asiakasarvosteluista.
- Valmistus: Ennakoivassa kunnossapidossa putkia voidaan käyttää koneiden anturitietojen esikäsittelyyn, mukaan lukien numeeriset ominaisuudet, kuten lämpötila, paine ja tärinä, sekä kategoriset ominaisuudet, kuten konetyyppi ja käyttöolosuhteet. RobustScaler voi olla erityisen hyödyllinen täällä mahdollisten poikkeavien lukemien vuoksi.
Globaalien datasarjojen haasteiden ratkaiseminen
Kun työskentelet globaalien datasarjojen kanssa, kohtaat usein erityisiä haasteita, jotka vaativat huolellista harkintaa esikäsittelyn aikana. Tässä on joitain yleisiä ongelmia ja strategioita niiden ratkaisemiseksi:
- Vaihtelevat datamuodot: Päivämäärillä, numeroilla ja valuutoilla voi olla eri muotoja eri alueilla. Varmista johdonmukainen jäsentäminen ja muotoilu. Esimerkiksi päivämäärät voivat olla muodossa PP/KK/VVVV tai KK/PP/VVVV. Käytä asianmukaisia kirjastoja päivämäärämuunnosten ja -muotoilun käsittelyyn.
- Kielierot: Tekstidata voi olla eri kielillä, mikä edellyttää käännöstä tai kielikohtaisia esikäsittelytekniikoita. Harkitse kirjastojen, kuten Google Translate API:n (asianmukaisilla käyttöhuomioilla ja kustannusvaikutuksilla), käyttöä käännöksessä tai NLTK:ta kielikohtaisessa tekstinkäsittelyssä.
- Valuuttamuunnos: Taloudellinen data voi olla eri valuutoissa. Muunna kaikki arvot yhteiseksi valuutaksi käyttämällä ajantasaisia valuuttakursseja. Käytä luotettavia API:ja saadaksesi tarkkoja ja reaaliaikaisia valuuttakursseja.
- Aikavyöhykkeet: Aikasarjadata voidaan tallentaa eri aikavyöhykkeillä. Muunna kaikki aikaleimat yhteiseksi aikavyöhykkeeksi (esim. UTC) johdonmukaisuuden varmistamiseksi. Käytä kirjastoja, kuten pytz, aikavyöhykemuunnosten käsittelyyn.
- Kulttuurierot: Kulttuuriset vivahteet voivat vaikuttaa datan tulkintaan. Esimerkiksi asiakastyytyväisyyspisteet voidaan tulkita eri tavalla eri kulttuureissa. Ole tietoinen näistä vivahteista ja ota ne huomioon suunnitellessasi esikäsittelyvaiheitasi.
- Datan laatuongelmat: Datan laatu voi vaihdella merkittävästi eri lähteistä. Ota käyttöön vankat datan validointi- ja puhdistusmenetelmät virheiden tunnistamiseksi ja korjaamiseksi.